package com.hedl.practice.diyJava.multithreading.thread_synchronization.test;

public class Study_1 {
    public static void main(String[] args) throws InterruptedException {
        AddThread add = new AddThread();
        DecThread dec = new DecThread();
        add.start();
        dec.start();
        add.join();
        dec.join();
        /**
         * 最后结果应该是0，但是，每次运行，结果实际上都是不一样的。
         *      因为线程调度是操作系统来执行的，有时候a线程刚执行就中断了，执行b线程了；
         * 解决方法是：加锁（临界区）任何时候临界区最多只有一个线程能执行。synchronized(lock)
         */
        System.out.println(Counter.count);
    }
}

class Counter{
    public static final Object lock = new Object();
    public static int count = 0;
}

class AddThread extends Thread{
    public void run(){
        for (int i = 0;i<10000;i++){
            synchronized (Counter.lock){
                Counter.count += 1;
            }
        }
    }
}

class DecThread extends Thread{
    public void run(){
        for (int i=0;i<10000;i++){
            synchronized (Counter.lock){
                Counter.count-=1;
            }
        }
    }
}